package sort;


public class MergeSort {
	public static int[] mergesort(int[] rij) {
		if(rij.length <= 1){
			return rij;
		}
		int[] hulprij = new int[rij.length];
		return mergesort(rij, hulprij, 0, rij.length - 1);
	}

	private static int[] mergesort(int[] rij, int[] hulprij, int links, int rechts) {
		if (links < rechts) {
			int midden = (links + rechts) / 2;
			mergesort(rij, hulprij, links, midden);
			mergesort(rij, hulprij, midden + 1, rechts);
			merge(rij, hulprij, links, midden, rechts);
		}
		return rij;
	}

	private static int[] merge(int[] rij, int[] hulprij, int links, int midden, int rechts) {
		int w1 = links, w2 = midden + 1, hw = links;
		while (w1 <= midden && w2 <= rechts)
			hulprij[hw++] = rij[w1]<(rij[w2]) ? rij[w1++] : rij[w2++];
		if (w1 > midden)
			while (w2 <= rechts)
				hulprij[hw++] = rij[w2++];
		else
			while (w1 <= midden)
				hulprij[hw++] = rij[w1++];
		for (hw = links; hw <= rechts; hw++)
			rij[hw] = hulprij[hw];
		return rij;
	}

}